package com.ljw.miniweb.money.controller;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.ljw.miniweb.money.bean.MoneyBean;
import com.ljw.miniweb.money.dao.MoneyDao;
import com.ljw.miniweb.money.dao.MoneyDaoImpl;

/**
name    : MoneyController
content : 가계부 controller
date    : 2011.04.08
author  : ljw

@author ljw(jwlee1728@gmail.com)
@version 1.0

* @see class_name : "See also"라는 항목을 만들어 해당 클래스와 연결해준다.
* @see class_name#method_name : "See also"라는 항목을 만들어 특정 메소드와 연결해준다.
* @param name description : 특정 메소드가 취하는 파라메터를 기술할 때 사용된다.
* @return description : 특정 메소드의 리턴값을 기술할 때 사용된다.
* @exception class_name : 특정 메소드가 발생시킬 수 있는 에외상황을 기술할 때 사용된다.
*/
@Controller
@RequestMapping(value="/money.ljw")
public class MoneyController {
	
	protected final Log logger = LogFactory.getLog(this.getClass());
	
	@Resource(name="moneyDao")
	private MoneyDao moneyDao;
	
	/*public void setMoneyDao(MoneyDao moneyDao){
		this.moneyDao = moneyDao;
	}*/
	
	/** 
	 * Method   : list
	 * 최초작성일  : 2011. 11. 3. 
	 * 작성자 : jw
	 * 변경이력 : 
	 * @param request
	 * @param response
	 * @param command
	 * @return 
	 * Method 설명 : 금전 사용 내역에 대한 리스트를 보여준다. 
	 */
	@RequestMapping(params="method=list")
	public ModelAndView list(HttpServletRequest request, HttpServletResponse response, Object command){
		logger.info("MoneyController.list()");
		ArrayList list = new ArrayList();
		
		try{
			list = moneyDao.getMoneyList();
		}catch(Exception e){
			MoneyBean moneyBean = new MoneyBean();
			list = (ArrayList) moneyBean.getMoneyListDummy();
		}
		ModelAndView modelAndView = new ModelAndView("/WEB-INF/jsp/money/moneyList.jsp");
		modelAndView.addObject("list", list);
		
		return modelAndView;
	}
	
	
	/** 
	 * Method   : wirte
	 * 최초작성일  : 2011. 11. 3. 
	 * 작성자 : jw
	 * 변경이력 : 
	 * @param request
	 * @param response
	 * @param command
	 * @return 
	 * Method 설명 : 금액 사용 내역을 저장한다.
	 */
	@RequestMapping(params="method=write")
	public ModelAndView wirte(HttpServletRequest request, HttpServletResponse response, Object command){
		logger.info("MoneyController write");
		List list = new ArrayList();
		MoneyBean moneyBean = new MoneyBean();
		moneyBean = (MoneyBean) request.getAttribute("moneyBean");
		
		MoneyDao moneyDao = new MoneyDaoImpl();
		try {
			moneyDao.insertMoney(moneyBean);	
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		//insert 이후 최신리스트를 조회한다
		try {
			list = moneyDao.getMoneyList();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		ModelAndView modelAndView = new ModelAndView("jsp/money/moneyList");
		modelAndView.addObject("list", list);
		modelAndView.addObject("moneyBean", moneyBean);		//test 케이스용.
		
		return modelAndView;
	}
}